home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 288_01 / knauss.txt < prev    next >
Text File  |  1989-05-23  |  14KB  |  239 lines

  1. A Poor Man's Solution to the Traveling Salesman Problem
  2.  
  3. Kevin E Knauss
  4.  
  5. 12 Mar 89
  6.  
  7. Given a map and a means of transportation, a competent traveling
  8. salesman can pick a reasonable route to all his customers. The route he
  9. picks needn't be optimal just practical. In this article, we'll explore
  10. a hypothetical salesman's intuitive approach to finding a practical
  11. route to all his customers and its implementation in the C programming
  12. language. In an attempt to find elegant optimal solutions to tough
  13. problems, we often overlook solutions which appear to be rather
  14. "brutish." Upon closer inspection, however, we see that these solutions
  15. are more elegant than they appear and, better yet, they work!
  16.  
  17. BACKGROUND
  18.  
  19. Routing and scheduling problems are inherently difficult to solve
  20. because they often require total enumeration of all possible outcomes. 
  21. As the number of data points in the problem increases, the possible
  22. outcomes increase exponentially. With the Traveling Salesman Problem
  23. (TSP) for instance, studies have shown that an algorithm which yields an
  24. exact solution is relatively infeasible for networks containing in
  25. excess of 100 points. In fact, there are problems with as few as 48
  26. cities for which the best answer found has not been proven to be
  27. optimal. By using heuristics of various types, one is enabled to find
  28. feasible (though not necessarily optimal) solutions to these otherwise
  29. "unsolvable" problems. 
  30.  
  31. The TSP simply stated is: "A salesman, starting in one city, wishes to
  32. visit each n─1 other cities once and only once and return to the start. 
  33. In what order should he visit the cities to minimize the total distance
  34. traveled?" (8) This may seem too trivial a task to have generated active
  35. research for over three decades (the literature I've researched goes
  36. back to 1958), but there are many practical applications for the
  37. solution of this basic problem. Automated drilling machines and the
  38. newer laser drills used to drill printed circuit boards, for example,
  39. may have hundreds or thousands of holes to drill and often spend as much
  40. time traveling to a position for a hole as they do drilling it. 
  41. Programming efficient head travel for these machines could make the
  42. difference for a company to turn a profit or loss. Solve the more basic
  43. TSP, and the marginal printed circuit board company may be able to stay
  44. in business by applying the same techniques. 
  45.  
  46. The TSP is one which is, to quote an old cliche, "easier said than
  47. done." That is, it is easy to explain the problem but difficult to
  48. solve; at least it seems difficult to solve when we look at many of the
  49. purely mathematical models that are, too often, not related back to the
  50. original problem. I chose to attack the TSP in a simplistic manner in
  51. an attempt to find one or more algorithms which would approximate a
  52. person's intuitive approach. In so doing, I was able to find an
  53. efficient way to "solve" the problem by producing acceptable results to
  54. large─scale traveling salesman problems. (Note that the word
  55. "acceptable" implies that judgments are required.)
  56.  
  57. TERMINOLOGY
  58.  
  59. Before we begin traveling around, a review of TSP terminology is in
  60. order. We'll begin with the city, our most basic term. This is what
  61. will be visited and may also be referred to as a town, point, node, or
  62. vertex. One goes from one city to the next by traveling a given
  63. distance or incurring a specified cost. The terms link, arc, and edge
  64. are also used in place of distance or cost. The collection of all the
  65. cities and the distances between each pair is a network or graph and is
  66. often represented by a distance matrix. A salesman will follow a route
  67. to visit each of the cities in the network, and this route may also be
  68. called a tour, path, or circuit. Finally, if we remove two or more
  69. links from the completed tour, we will break it into sub─paths or chains
  70. of cities. 
  71.  
  72. The distance matrix is a two dimensional array where the horizontal or
  73. row vector (dimension) is identical to the vertical or column vector. 
  74. The cell found at each intersection contains the distance or cost
  75. between the city represented by the horizontal coordinate and the city
  76. represented by the vertical coordinate. Those familiar with graph
  77. theory haven't seen anything new here. If you've seen a lot of these
  78. terms for the first time, however, don't be afraid to refer back, for
  79. I'll be using many of them interchangeably. 
  80.  
  81. APPROACH
  82.  
  83. Let's now consider the problem in terms of a salesman who must visit a
  84. dozen or so cities in the state of Hypothetica. Since the salesman must
  85. leave and return to the same city and visit all other cities in the
  86. process, his tour will be some sort of loop through the state. 
  87. Obviously, as a loop is unbroken, one may start at any point on the the
  88. tour and still trace the same loop. Thus the starting city is of no
  89. consequence; rather we want to find the best route irregardless of the
  90. salesman's starting point. 
  91.  
  92. Intuitively, one would want to travel to cities nearby and to cities
  93. near those. We can build a procedure based on this thought by first
  94. finding the closest two cities and then continuing to the next closest
  95. city that hasn't been visited. This should produce a fairly good tour,
  96. or at least would seem so at first. It may turn out that this tour
  97. isn't optimal, but it's a reasonable solution for starters. 
  98.  
  99. As the cities are exhausted from our network, we have fewer choices to
  100. make. Intuitively, we may reason that the choices left to us may not be
  101. as good as those we're offered in the early stages of tour building. 
  102. Our salesman may be forced to backtrack and cross previously traversed
  103. arcs. If we check the proximity of neighboring cities, however,
  104. especially those near the end of the initial tour, we may be able to
  105. find improvements. 
  106.  
  107. One approach we may try involves the removal of a single city from the
  108. tour and testing it between each pair of cities in the remaining tour. 
  109. Once we've tested it in each location, we'll place it in the location
  110. where the overall circuit cost is lowest (i.e. the shortest distance
  111. the salesman must travel). This same approach may be tried with chains
  112. of cities of varying lengths, but with chains we must also check for
  113. orientation (that is try the chain both frontward and backward between
  114. each pair of cities). This leaves us with our last thought of simply
  115. checking the orientation of a chain in its original location. If you
  116. think a picture is worth a thousand words, see Figure 1 so we can cut
  117. 4,000 words from this article. By testing the proximity of every city
  118. or the proximity and orientation of every chain, we can be fairly
  119. confident that any ill effects produced by our original technique will
  120. be cleaned up. 
  121.  
  122. If we look through related literature, we find that our tour building
  123. and improvement techniques have already been studied and named. Our
  124. tour building algorithm is known as the nearest neighbor or greedy
  125. algorithm. Our tour improvement algorithms generally fall into a
  126. category known as k─optimality or k─opt for short. A tour is said to be
  127. k─optimal if we are unable to improve it by removing any k arcs and
  128. replacing them with k others. Checking chain orientation in place is
  129. the same as removing two arcs and replacing them with two others and is
  130. thus the 2─opt algorithm. Likewise, chain proximity and orientation is
  131. the 3─opt algorithm with point proximity a special case where the chain
  132. to be tested has length one. Even though these improvement techniques
  133. are related, we'll evaluate each on its own merits. 
  134.  
  135. IMPLEMENTATION
  136.  
  137. To evaluate the intuitive approach we may embark upon an elaborate
  138. mathematical analysis that may or may not produce any conclusive
  139. results, or we may implement the solutions in practical models that may
  140. be run against live data. If this was a scientific journal, we'd follow
  141. the mathematical tack; but since this is a practical journal, we'll try
  142. the modeling approach. 
  143.  
  144. The main functions are programmed in their own modules called:
  145. NearNeighbor, PointOpt, TwoOpt, Hybrid, and ThreeOpt (listings 1 through
  146. 5 respectively). NearNeighbor generates